package cn.iocoder.yudao.module.digital.controller.admin.projects.vo;

import cn.iocoder.yudao.module.digital.convert.ListStringConverter;
import cn.iocoder.yudao.module.digital.convert.UserIdsConverter;
import cn.iocoder.yudao.module.digital.convert.UserNameConverter;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotEmpty;
import lombok.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;


@Schema(description = "管理后台 - 项目 Response VO")
@Data
@ExcelIgnoreUnannotated
public class ProjectsRespVO {

    @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "32702")
    private Integer id;

    @Schema(description = "项目名字", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
    @ExcelProperty("项目名字")
    private String name;

    @Schema(description = "项目类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
    @ExcelProperty(value = "项目类型", converter = DictConvert.class)
    @DictFormat("project_type") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer type;

    @Schema(description = "主办方（字典）")
    @ExcelProperty(value = "主办方（字典）", converter = DictConvert.class)
    @DictFormat("project_organizer") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer organizer;

    @Schema(description = "主办方（不在字典里面）")
    @ExcelProperty("主办方（不在字典里面）")
    private String organizerOther;

    @Schema(description = "级别（省级，国家级，校级）", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty(value = "级别（省级，国家级，校级）", converter = DictConvert.class)
    @DictFormat("project_level") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer level;

    @Schema(description = "第一作者，负责人", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty(value = "第一作者", converter = UserNameConverter.class)
    private String author;

    @Schema(description = "成员", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty(value = "成员", converter = UserIdsConverter.class)
    private String member;

    @Schema(description = "贡献率", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("贡献率")
    private String rate;

    @Schema(description = "立项时间", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("立项时间")
    private LocalDateTime projectStartTime;

    @Schema(description = "结项时间")
    @ExcelProperty("结项时间")
    private LocalDateTime projectEndTime;

    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
    @ExcelProperty(value = "状态", converter = DictConvert.class)
    @DictFormat("project_status") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer status;

    @Schema(description = "佐证地址")
    @ExcelProperty(value = "佐证地址", converter = ListStringConverter.class)
    private List<String> evidenceUrl;

    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("创建时间")
    private LocalDateTime createTime;

    @Schema(description = "备注", example = "你说的对")
    @ExcelProperty("备注")
    private String remark;

    @Schema(description = "保留字段")
    @ExcelProperty("保留字段")
    private String reserved1;

    @Schema(description = "保留字段")
    @ExcelProperty("保留字段")
    private String reserved2;

    @Schema(description = "保留字段")
    @ExcelProperty("保留字段")
    private String reserved3;

    @Schema(description = "保留字段")
    @ExcelProperty("保留字段")
    private String reserved4;

    @Schema(description = "保留字段")
    @ExcelProperty("保留字段")
    private String reserved5;

}